from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger


def get_page(page=1, list_obj=None, page_size=30):  # 分页器
    """
    用于分页显示数据
    :param page: 页数
    :param list_obj: 所有数据对象优先list
    :param page_size: 每页多少条数据
    :return: [[选择的页数对象], 总页数]
    """
    paginator = Paginator(list(list_obj), page_size)  # 在这里调整每一页几条数据
    list_page_num = list(range(1, paginator.num_pages + 1))
    try:
        return paginator.page(page), paginator.num_pages, list_page_num
    except PageNotAnInteger:  # 如果页面不是整数，则提交第一页。
        return paginator.page(1), paginator.num_pages, list_page_num
    except EmptyPage:  # 如果页面超出范围(例如9999)，提交结果的最后一页。
        return paginator.page(paginator.num_pages), paginator.num_pages, list_page_num


if __name__ == '__main__':
    print(get_page('1', [1, 1, 1, 1, 2, 2, 2, 3, 4, 5], '5'))

# 页数对象.has_next(),  # 是否有下一页
# 页数对象.has_previous(),  # 是否有前一页
# 页数对象.has_other_pages(),  # 是否有其他页
# 页数对象.number,  # 当前页
# 页数对象.sum_number,  # 总页数
# 页数对象.next_page_number()  # 下一页地址，需要判断，没有会报错

"""
csdn加速

    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.0.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.0.1/js/bootstrap.min.js"></script>




<nav aria-label="Page navigation" style="margin: 0 auto; width: {{ css_px_width }}px">
  <ul class="pagination">
    <li>
      <a href="{% url 'showall' %}?page=1" aria-label="Previous">
        <span aria-hidden="true">&laquo;</span>
      </a>
    </li>
      {% for foo in list_page_num %}
          {% if page_obj.number == foo %}
        <li><span style="font-size: 26px;"><a href="{% url 'showall' %}?page={{ foo }}">{{ foo }}</a></span></li>
          {% else %}
        <li><a href="{% url 'showall' %}?page={{ foo }}">{{ foo }}</a></li>
          {% endif %}
      {% endfor %}
    <li>
      <a href="{% url 'showall' %}?page=999999" aria-label="Next">
        <span aria-hidden="true">&raquo;</span>
      </a>
    </li>
  </ul>
</nav>
"""
